# 递归搜索当前目录下所有cpp文件
file(GLOB_RECURSE SRC *.cpp)
# 获取当前目录不包含路径的名称
get_filename_component(CURRENT_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
# message(STATUS "Current directory: ${CURRENT_DIR_NAME}")
# 去除test目录下的文件
foreach(file ${SRC})
    get_filename_component(dir ${file} DIRECTORY)
    if (${dir} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test)
        # message(STATUS "delete test source files: ${file}")
        list(REMOVE_ITEM SRC ${file})
    endif()
endforeach()

# 将当前目录下的源文件添加到全局变量"${CURRENT_DIR_NAME}_srcs"中
set_property(GLOBAL PROPERTY ${CURRENT_DIR_NAME}_srcs "${SRC}")

# 设置子目录变量并添加当前目录路径 !若当前目录下没有cpp文件，该目录会被跳过
set(SUB_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
# 遍历当前目录及其子目录下的所有文件
foreach(filename IN LISTS SRC)
    # 提取文件不含文件名的路径
    get_filename_component(dir ${filename} DIRECTORY)
    # message(STATUS "Add include directory: ${filename}")
    # 将路径添加到列表中
    list(FIND SUB_DIRS ${dir} index)
    # 防止路径重复添加
    if(index EQUAL -1)
        list(APPEND SUB_DIRS ${dir})
    endif()
endforeach()
# message(STATUS "Add include directories: ${SUB_DIRS}")
# 将子目录路径列表设置为全局变量
set_property(GLOBAL PROPERTY ${CURRENT_DIR_NAME}_sub_dirs "${SUB_DIRS}")
